/**
 * 社区模块API接口
 * @module api/community
 * @author 互成一家
 * @description 社区相关的API接口封装
 */
import request from './request';
import * as mockCommunity from '../mock/community';

/**
 * 获取标签列表
 * @async
 * @function getTagList
 * @returns {Promise<Object>} 返回标签列表
 */
export const getTagList = async () => {
  // 实际项目中应该调用接口
  // return request.get('/api/community/tags');
  
  // 使用Mock数据
  return mockCommunity.mockGetTagList();
};

/**
 * 获取动态列表
 * @async
 * @function getPostList
 * @param {Object} params - 查询参数
 * @param {String} [params.tag='all'] - 标签ID
 * @param {Boolean} [params.followed=false] - 是否只看关注的用户
 * @param {Number} [params.page=1] - 页码
 * @param {Number} [params.pageSize=10] - 每页条数
 * @returns {Promise<Object>} 返回动态列表和分页信息
 */
export const getPostList = async (params = {}) => {
  // 实际项目中应该调用接口
  // return request.get('/api/community/posts', params);
  
  // 使用Mock数据
  return mockCommunity.mockGetPostList(params);
};

/**
 * 获取动态详情
 * @async
 * @function getPostDetail
 * @param {Number|String} postId - 动态ID
 * @returns {Promise<Object>} 返回动态详情
 */
export const getPostDetail = async (postId) => {
  // 实际项目中应该调用接口
  // return request.get(`/api/community/posts/${postId}`);
  
  // 使用Mock数据
  return mockCommunity.mockGetPostDetail(postId);
};

/**
 * 获取评论列表
 * @async
 * @function getCommentList
 * @param {Object} params - 查询参数
 * @param {Number|String} params.postId - 动态ID
 * @param {Number} [params.page=1] - 页码
 * @param {Number} [params.pageSize=10] - 每页条数
 * @returns {Promise<Object>} 返回评论列表和分页信息
 */
export const getCommentList = async (params = {}) => {
  // 实际项目中应该调用接口
  // return request.get('/api/community/comments', params);
  
  // 使用Mock数据
  return mockCommunity.mockGetCommentList(params);
};

/**
 * 获取用户信息
 * @async
 * @function getUserInfo
 * @param {Number|String} userId - 用户ID
 * @returns {Promise<Object>} 返回用户信息
 */
export const getUserInfo = async (userId) => {
  // 实际项目中应该调用接口
  // return request.get(`/api/community/users/${userId}`);
  
  // 使用Mock数据
  return mockCommunity.mockGetUserInfo(userId);
};

/**
 * 获取用户动态列表
 * @async
 * @function getUserPosts
 * @param {Object} params - 查询参数
 * @param {Number|String} params.userId - 用户ID
 * @param {Number} [params.page=1] - 页码
 * @param {Number} [params.pageSize=10] - 每页条数
 * @returns {Promise<Object>} 返回用户动态列表和分页信息
 */
export const getUserPosts = async (params = {}) => {
  // 实际项目中应该调用接口
  // return request.get('/api/community/users/posts', params);
  
  // 使用Mock数据
  return mockCommunity.mockGetUserPosts(params);
};

/**
 * 发布动态
 * @async
 * @function createPost
 * @param {Object} postData - 动态数据
 * @param {String} postData.content - 动态内容
 * @param {Array} [postData.images=[]] - 图片列表
 * @param {String} [postData.tag='all'] - 标签ID
 * @param {Boolean} [postData.isAnonymous=false] - 是否匿名
 * @returns {Promise<Object>} 返回发布结果
 */
export const createPost = async (postData) => {
  // 实际项目中应该调用接口
  // return request.post('/api/community/posts', postData);
  
  // 使用Mock数据
  return mockCommunity.mockCreatePost(postData);
};

/**
 * 删除动态
 * @async
 * @function deletePost
 * @param {Number|String} postId - 动态ID
 * @returns {Promise<Object>} 返回删除结果
 */
export const deletePost = async (postId) => {
  // 实际项目中应该调用接口
  // return request.delete(`/api/community/posts/${postId}`);
  
  // 使用Mock数据
  return mockCommunity.mockDeletePost(postId);
};

/**
 * 点赞/取消点赞动态
 * @async
 * @function likePost
 * @param {Object} params - 参数
 * @param {Number|String} params.postId - 动态ID
 * @param {Boolean} params.isLike - 是否点赞
 * @returns {Promise<Object>} 返回操作结果
 */
export const likePost = async (params = {}) => {
  // 实际项目中应该调用接口
  // return request.post('/api/community/posts/like', params);
  
  // 使用Mock数据
  return mockCommunity.mockLikePost(params);
};

/**
 * 发表评论
 * @async
 * @function createComment
 * @param {Object} commentData - 评论数据
 * @param {Number|String} commentData.postId - 动态ID
 * @param {String} commentData.content - 评论内容
 * @param {Boolean} [commentData.isAnonymous=false] - 是否匿名
 * @returns {Promise<Object>} 返回发表结果
 */
export const createComment = async (commentData) => {
  // 实际项目中应该调用接口
  // return request.post('/api/community/comments', commentData);
  
  // 使用Mock数据
  return mockCommunity.mockCreateComment(commentData);
};

/**
 * 申请添加好友
 * @async
 * @function addFriend
 * @param {Object} params - 参数
 * @param {Number|String} params.userId - 用户ID
 * @param {String} [params.message=''] - 申请消息
 * @returns {Promise<Object>} 返回申请结果
 */
export const addFriend = async (params = {}) => {
  // 实际项目中应该调用接口
  // return request.post('/api/community/friends/add', params);
  
  // 使用Mock数据
  return mockCommunity.mockAddFriend(params);
};

/**
 * 关注/取消关注用户
 * @async
 * @function followUser
 * @param {Object} params - 参数
 * @param {Number|String} params.userId - 用户ID
 * @param {Boolean} params.isFollow - 是否关注
 * @returns {Promise<Object>} 返回操作结果
 */
export const followUser = async (params = {}) => {
  // 实际项目中应该调用接口
  // return request.post('/api/community/users/follow', params);
  
  // 使用Mock数据
  return mockCommunity.mockFollowUser(params);
};
